
#include "Fichier.h"
#include "conio.h"



void Nom_Du_Joueur()                                               // fonction qui permet d'inserer le nom du joueur dans un fichier text
{

    system("cls");
    char nom_joueur[50];
    FILE*nj;
    nj=fopen("nom_du_joueur.txt","a");
  /*  if(!nj)
        printf("erreur");*/

    printf("Veuillez Entrer Votre Nom :\n");
    scanf("%s",nom_joueur);
    fprintf(nj,"\n nom_du_joueur :%s",nom_joueur);
}


void Niveau_du_jeu()                                                  // fonction qui permet au joueur de choisir un niveau de jeu
{

    int niveau;

    FILE*nj;
    nj=fopen("nom_du_joueur.txt","a");
    system("cls");
    do
    {printf (" Choisissez Votre Niveau : \n");
    printf (" 1 - Facile \n");
    printf (" 2 - Moyen \n");
    printf (" 3 - Difficile \n");
    scanf("%d",&niveau);
    }
    while(niveau>3);
    system("cls");

    if(niveau==1)
    {
        int choix1;
        niveau_facile();
        do

        {printf("\n \nQue Voulez Vous Faire?\n\n");
        printf("1 - Rejouer\n");
        printf("2 - Passer Au Niveau Suivant\n");
        printf("3 - Revenir Au Menu General\n");
        scanf("%d",&choix1);}
        while(choix1>3);

    }


    else if(niveau==2)
    {
        int choix2;
        niveau_moyen();
        do
        {printf("\nQue Voulez Vous Faire?\n");
        printf("1 - Rejouer\n");
        printf("2 - Passer Au Niveau Suivant\n");
        printf("3 - Revenir Au Menu General\n");
        scanf("%d",&choix2);}

while(choix2>3);

    }


    else if(niveau==3)
    {
        int choix3;
        niveau_difficile();
        do
        {printf("\nQue Voulez Vous Faire?\n");
        printf("1 - Rejouer\n");
        printf("2 - Revenir Au Menu General\n");
        scanf("%d",&choix3);}
        while(choix3>2);


    }



}





int  niveau_facile()                                                                   //la fonction du niveau facile
{

    int x,w,i,j,ch,aa,b,a,s,choix1;
    int T[4][4],TM[4][4];
    int grille;
    FILE*gr11;
    FILE*ins1niv1;
    do
    {
        printf("\n Quelle Grille Voulez Vous Choisir? \n Grille 1 ** Grille 2 ** Grille 3\n");
        scanf("%d",&grille);
    }
    while(grille>3||grille<1);

    system("cls");

  //grille 1 niveau 1

    if(grille==1)                                                                            //le choix de la grille 1 dans le niveau facile

    {
        printf("\n1 - Nouvelle partie\n2 - Continuer\n");
        do
        {
            scanf("%d",&s);
        }
        while(s!=1 && s!=2);
        if(s==1)
            gr11=fopen("grille_1_niv_1.txt","r");
        if(s==2)
            gr11=fopen("sauvgard_1_niv_1.txt","r");
        printf("\n A VOUS DE JOUER MAINTENANT \n");


        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(gr11,"%d",&w);
                T[i][j]=w;
            }
        }
        fclose(gr11);
        do
        {
            system("cls");
            for(i=0; i<3; i++)
            {
                printf("\n");
                for(j=0; j<4; j++)
                {

                    if(T[i][j]==0)
                        {printf("\t");
                            textbackground(RED);
                        printf("%c",'?');
                        textbackground(CYAN);

                        }
                    else
                    {
                        textbackground(CYAN);
                        printf("\t");
                        if(j==3)
                    {

                        textcolor(YELLOW);
                    }

                        printf("%d",T[i][j]);
                        textcolor(WHITE);
                    }

                }

            }

            printf("\n\n");
            for(j=0; j<3; j++)
                {textcolor(BLUE);
                printf("\t%d  ",T[3][j]);
                textcolor(WHITE);}



            printf("\n\n\n La liste des valeurs : 1 3 4 8 9 \n") ;
            printf("Pour quitter la partie taper sur 4 4 \n");
            printf("Donner la Ligne\n");
            scanf("%d",&a);
            printf("Donner la Colonne\n");
            scanf("%d",&b);
            if(T[a-1][b-1]==0)

            {
                do
               {
               printf("Quelle Est La Valeur Parmi La Liste Que Vous Voulez Inserer? \n");
                scanf("%d",&x);
                T[a-1][b-1]=x;
        }
           while((x!=1)&&(x!= 3)&&(x!= 4)&&(x!= 8)&&(x!= 9)  );

            }
            else
                printf("Erreur");
        }
        while (!verif(T) && a!=4);

        sauvguard(T,"sauvgard_1_niv_1.txt");
        ins1niv1=fopen("insertion1niv1.txt","r");

        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(ins1niv1,"%d",&ch);
                TM[i][j]=ch;
            }
        }
        fclose(ins1niv1);
        aa=0;
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                if (T[i][j]==TM[i][j])
                    aa++;
            }
        }

        system("cls");
        if (aa==16)
            {printf("\nVous avez Gagne\n");
            printf("\n Votre score est de 10 Points \n");
            printf("\n \n Que Voulez Vous Faire?\n\n");
        printf("1 - Rejouer\n");
        printf("2 - Passer Au Niveau Suivant\n");
        printf("3 - Revenir Au Menu General\n");
        scanf("%d",&choix1);
        switch(choix1)
        {
        case 1:
        {
            niveau_facile();
        }
        case 2:
        {
            niveau_moyen();
        }

        case 3:
        {
            system("cls");
            MenuGeneral();
        }

        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();

        system("cls");
        MenuGeneral();}
        else {printf("Vous avez Perdu\n");
        printf("Votre score est de 0 Points \n");
             textbackground(RED);
                        printf("la solution est : \n");
                        textbackground(CYAN);

        for(i=0; i<3; i++)
        {
            for(j=0; j<4; j++)
            {textcolor(BLACK);
                printf("\t  %d  ",TM[i][j]);
            textcolor(WHITE);
            }
            printf("\n");}

  for(j=0; j<3; j++)
                {textcolor(BLACK);
                printf("\t  %d ",T[3][j]);
              textcolor(WHITE);
                }


        printf("\n \nQue Voulez Vous Faire?\n\n");
        printf("1 - Rejouer\n");
        printf("2 - Revenir Au Menu General\n");
        scanf("%d",&choix1);
        switch(choix1)
        {
        case 1:
        {
            niveau_facile();
        }


        case 2:
        {
            system("cls");
            MenuGeneral();
        }

        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();

        system("cls");
        MenuGeneral();
    }
    }

//grille 2 niveau1

    else if (grille==2)                                                    //le choix de la grille 2 dans le niveau facile

    {
        printf("\n1 - Nouvelle partie\n 2 - Continuer\n");
        do
        {
            scanf("%d",&s);
        }
        while(s!=1 && s!=2);
        if(s==1)
            gr11=fopen("grille_2_niv_1.txt","r");
        if(s==2)
            gr11=fopen("sauvgard_2_niv_1.txt","r");
        printf("\n A VOUS DE JOUER MAINTENANT \n");

 for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(gr11,"%d",&w);
                T[i][j]=w;
            }
        }
        fclose(gr11);
        do
        {
            system("cls");
            for(i=0; i<3; i++)
            {
                printf("\n");
                for(j=0; j<4; j++)
                {

                    if(T[i][j]==0)
                        {printf("\t");
                            textbackground(RED);
                        printf("%c",'?');
                        textbackground(CYAN);

                        }
                    else
                    {
                        textbackground(CYAN);
                        printf("\t");
                        if(j==3)
                    {

                        textcolor(YELLOW);
                    }

                        printf("%d",T[i][j]);
                        textcolor(WHITE);
                    }

                }

            }

            printf("\n\n");
            for(j=0; j<3; j++)
                {textcolor(BLUE);
                printf("\t%d  ",T[3][j]);
                textcolor(WHITE);}



            printf("\n\n\n La liste des valeures : 2 4 5 6 9 \n") ;
                printf("Pour quitter la partie taper sur 4 4 \n");
            printf("Donner la Ligne\n");
            scanf("%d",&a);
            printf("Donner la Colonne\n");
            scanf("%d",&b);
            if(T[a-1][b-1]==0)
            {
                 do
               {
               printf("Quelle Est La Valeur Parmi La Liste Que Vous Voulez Inserer? \n");
                scanf("%d",&x);
                T[a-1][b-1]=x;
        }
           while((x!=2)&&(x!=4)&&(x!=5)&&(x!= 6)&&(x!= 9)  );
            }
            else
                printf("Erreur");


    }
        while (!verif(T) && a!=4);
        sauvguard(T,"sauvgard_2_niv_1.txt");
        ins1niv1=fopen("insertion2niv1.txt","r");

        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(ins1niv1,"%d",&ch);
                TM[i][j]=ch;
            }
        }
        fclose(ins1niv1);
        aa=0;
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                if (T[i][j]==TM[i][j])
                    aa++;
            }
        }
        system("cls");
        if (aa==16)
            {printf("Vous avez Gagne\n");
            printf("Votre score est de 10 Points \n");
            printf("1 - Rejouer\n");
        printf("2 - Passer Au Niveau Suivant\n");
        printf("3 - Revenir Au Menu General\n");
        scanf("%d",&choix1);
        switch(choix1)
        {
        case 1:
        {
            niveau_facile();
        }
        case 2:
        {
            niveau_moyen();
        }

        case 3:
        {
            system("cls");
            MenuGeneral();
        }

        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();

        system("cls");
        MenuGeneral();}
        else {printf("vous avez Perdu\n");
        printf("Votre score est de 0 Points \n");
        textbackground(RED);
                        printf("la solution est : \n");
                        textbackground(CYAN);


        for(i=0; i<3; i++)
        {
            for(j=0; j<4; j++)
            {textcolor(BLACK);
                printf("\t  %d  ",TM[i][j]);
            textcolor(WHITE);
            }
            printf("\n");}

  for(j=0; j<3; j++)
                {textcolor(BLACK);
                printf("\t  %d ",T[3][j]);
              textcolor(WHITE);
                }

         printf("\n \nQue Voulez Vous Faire?\n\n");
        printf("1 - Rejouer\n");
        printf("2 - Revenir Au Menu General\n");
        scanf("%d",&choix1);
        switch(choix1)
        {
        case 1:
        {
            niveau_facile();
        }


        case 2:
        {
            system("cls");
            MenuGeneral();
        }

        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();

        system("cls");
        MenuGeneral();
        }

    }

    //GRILLE 3 NIVEAU 1

    else if (grille==3)                                                    //le choix de la grille 3 dans le niveau facile

    {
        printf("1 - Nouvelle partie \n 2 - Continuer\n");
        do
        {
            scanf("%d",&s);
        }
        while(s!=1 && s!=2);
        if(s==1)
            gr11=fopen("grille_3_niv_1.txt","r");
        if(s==2)
            gr11=fopen("sauvgard_3_niv_1.txt","r");
        printf("\n A VOUS DE JOUER MAINTENANT \n");

        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(gr11,"%d",&w);
                T[i][j]=w;
            }
        }
        fclose(gr11);
        do
        {
            system("cls");
            for(i=0; i<3; i++)
            {
                printf("\n");
                for(j=0; j<4; j++)
                {

                    if(T[i][j]==0)
                        {printf("\t");
                            textbackground(RED);
                        printf("%c",'?');
                        textbackground(CYAN);

                        }
                    else
                    {
                        textbackground(CYAN);
                        printf("\t");
                        if(j==3)
                    {

                        textcolor(YELLOW);
                    }

                        printf("%d",T[i][j]);
                        textcolor(WHITE);
                    }

                }

            }

            printf("\n\n");
            for(j=0; j<3; j++)
                {textcolor(BLUE);
                printf("\t%d  ",T[3][j]);
                textcolor(WHITE);}


            printf("\n\n\n La liste des valeures : 1 2 4 7 8 \n") ;
            printf("Pour quitter la partie taper sur 4 4 \n");
            printf("Donner la Ligne\n");
            scanf("%d",&a);
            printf("Donner la Colonne\n");
            scanf("%d",&b);
            if(T[a-1][b-1]==0)
         {
                 do
               {
               printf("Quelle Est La Valeur Parmi La Liste Que Vous Voulez Inserer? \n");
                scanf("%d",&x);
                T[a-1][b-1]=x;
        }
           while((x!=2)&&(x!=4)&&(x!=1)&&(x!= 7)&&(x!= 8)  );
            }
            else
                printf("Erreur");

        }
        while (!verif(T) && a!=4);
        sauvguard(T,"sauvgard_3_niv_1.txt");
        ins1niv1=fopen("insertion3niv1.txt","r");

        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(ins1niv1,"%d",&ch);
                TM[i][j]=ch;
            }
        }
        fclose(ins1niv1);
        aa=0;
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                if (T[i][j]==TM[i][j])
                    aa++;
            }
        }
        system("cls");
        if (aa==16)
        {
            printf("Vous avez Gagne");
            printf("Votre score est de 10 Points \n");
            printf("1 - Rejouer\n");
        printf("2 - Passer Au Niveau Suivant\n");
        printf("3 - Revenir Au Menu General\n");
        scanf("%d",&choix1);
        switch(choix1)
        {
        case 1:
        {
            niveau_facile();
        }
        case 2:
        {
            niveau_moyen();
        }

        case 3:
        {
            system("cls");
            MenuGeneral();
        }

        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();

        system("cls");
        MenuGeneral();}
        else {printf("Vous avez Perdu \n");
        printf("Votre score est de 0 Points \n");
        textbackground(RED);
                        printf("la solution est : \n");
                        textbackground(CYAN);

        for(i=0; i<3; i++)
        {
            for(j=0; j<4; j++)
            {textcolor(BLACK);
                printf("\t  %d  ",TM[i][j]);
            textcolor(WHITE);
            }
            printf("\n");}

  for(j=0; j<3; j++)
                {textcolor(BLACK);
                printf("\t  %d ",T[3][j]);
              textcolor(WHITE);
                }

          printf("\n \nQue Voulez Vous Faire?\n\n");
        printf("1 - Rejouer\n");
        printf("2 - Revenir Au Menu General\n");
        scanf("%d",&choix1);
        switch(choix1)
        {
        case 1:
        {
            niveau_facile();
        }


        case 2:
        {
            system("cls");
            MenuGeneral();
        }

        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();

        system("cls");
        MenuGeneral();
    }}

    return 0;
}





int niveau_moyen()                                                                                  //la fonction du niveau moyen
{
    int x,w,i,j,ch,aa,b,s,a,choix2;
    int T[4][4],TM[4][4];
    int grille;
    FILE*gr12;
    FILE*ins1niv2;
    do
    {
        printf("\n Quelle Grille Voulez Vous Choisir? \n Grille 1 ** Grille 2 ** Grille 3\n");
        scanf("%d",&grille);
    }
    while(grille>3||grille<1);
    system("cls");


    //grille1 niveau 2
    if(grille==1)                                                                      //le choix de la grille 1 dans le niveau moyen
    {
        printf("\n 1 - Nouvelle partie \n 2 - Continuer\n");
        do
        {
            scanf("%d",&s);
        }
        while(s!=1 && s!=2);
        if(s==1)
            gr12=fopen("grille_1_niv_2.txt","r");
        if(s==2)
            gr12=fopen("sauvgard_1_niv_2.txt","r");
        printf("\n A VOUS DE JOUER MAINTENANT \n");



        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(gr12,"%d",&w);
                T[i][j]=w;
            }
        }
        fclose(gr12);
        do
        {
            system("cls");
            for(i=0; i<3; i++)
            {
                printf("\n");
                for(j=0; j<4; j++)
                {

                    if(T[i][j]==0)
                        {printf("\t");
                            textbackground(RED);
                        printf("%c",'?');
                        textbackground(CYAN);

                        }
                    else
                    {
                        textbackground(CYAN);
                        printf("\t");
                        if(j==3)
                    {

                        textcolor(YELLOW);
                    }

                        printf("%d",T[i][j]);
                        textcolor(WHITE);
                    }

                }

            }

            printf("\n\n");
            for(j=0; j<3; j++)
                {textcolor(BLUE);
                printf("\t%d  ",T[3][j]);
                textcolor(WHITE);}




            printf("\n\n\n La liste des valeures : 1 2 4 7 8 9 \n") ;
            printf("Pour quitter la partie taper sur 4 4 \n");
            printf("Donner la Ligne\n");
            scanf("%d",&a);
            printf("Donner la Colonne\n");
            scanf("%d",&b);
            if(T[a-1][b-1]==0)
             {
                 do
               {
               printf("Quelle Est La Valeur Parmi La Liste Que Vous Voulez Inserer? \n");
                scanf("%d",&x);
                T[a-1][b-1]=x;
        }
           while((x!=2)&&(x!=4)&&(x!=7)&&(x!= 8)&&(x!= 9)&&(x!= 1)  );
            }
            else
                printf("Erreur");
        }
        while (!verif(T) && a!=4);
        sauvguard(T,"sauvgard_1_niv_2.txt");
        ins1niv2=fopen("insertion1niv2.txt","r");
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(ins1niv2,"%d",&ch);
                TM[i][j]=ch;
            }
        }
        fclose(ins1niv2);
        aa=0;
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                if (T[i][j]==TM[i][j])
                    aa++;
            }
        }
        system("cls");
        if (aa==16)
        {
            printf("\nVous avez Gagne");
            printf("\nVotre score est de 20 Points \n");

        printf("\n\n Que Voulez Vous Faire?\n");
        printf("1 - Rejouer\n");
        printf("2 - Passer Au Niveau Suivant\n");
        printf("3 - Revenir Au Menu General\n");
        scanf("%d",&choix2);
        switch(choix2)
        {
        case 1:
        {
            niveau_moyen();
        }
        case 2:
        {
            niveau_difficile();
        }
        case 3:
        {
            system("cls");
            MenuGeneral();

        }
        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();}
        else {printf("Vous avez Perdu\n");
        printf("Votre score est de 0 Points \n");
                 textbackground(RED);
                        printf("la solution est : \n");
                        textbackground(CYAN);

        for(i=0; i<3; i++)
        {
            for(j=0; j<4; j++)
            {textcolor(BLACK);
                printf("\t  %d  ",TM[i][j]);
            textcolor(WHITE);
            }
            printf("\n");}

  for(j=0; j<3; j++)
                {textcolor(BLACK);
                printf("\t  %d ",T[3][j]);
              textcolor(WHITE);
                }

        printf("\n\n Que Voulez Vous Faire?\n");
        printf("1 - Rejouer\n");

        printf("2 - Revenir Au Menu General\n");
        scanf("%d",&choix2);
        switch(choix2)
        {
        case 1:
        {
            niveau_moyen();
        }

        case 2:
        {
            system("cls");
            MenuGeneral();

        }
        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();
    }}

    //grille 2 niveau 2

    if(grille==2)                                                                  //le choix de la grille 2 dans le niveau moyen
    {
        printf("\n 1 - Nouvelle partie \n 2 - Continuer\n");
        do
        {
            scanf("%d",&s);
        }
        while(s!=1 && s!=2);
        if(s==1)
            gr12=fopen("grille_2_niv_2.txt","r");
        if(s==2)
            gr12=fopen("sauvgard_2_niv_2.txt","r");
        printf("\n A VOUS DE JOUER MAINTENANT \n");


               for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(gr12,"%d",&w);
                T[i][j]=w;
            }
        }
        fclose(gr12);
        do
        {
            system("cls");
            for(i=0; i<3; i++)
            {
                printf("\n");
                for(j=0; j<4; j++)
                {

                    if(T[i][j]==0)
                        {printf("\t");
                            textbackground(RED);
                        printf("%c",'?');
                        textbackground(CYAN);

                        }
                    else
                    {
                        textbackground(CYAN);
                        printf("\t");
                        if(j==3)
                    {

                        textcolor(YELLOW);
                    }

                        printf("%d",T[i][j]);
                        textcolor(WHITE);
                    }

                }

            }

            printf("\n\n");
            for(j=0; j<3; j++)
                {textcolor(BLUE);
                printf("\t%d  ",T[3][j]);
                textcolor(WHITE);}




            printf("\n\n\n La liste des valeures : 3 4 5 6 7 8 \n") ;
            printf("Pour quitter la partie taper sur 4 4 \n");
            printf("Donner la Ligne\n");
            scanf("%d",&a);
            printf("Donner la Colonne\n");
            scanf("%d",&b);
            if(T[a-1][b-1]==0)
             {
                 do
               {
               printf("Quelle Est La Valeur Parmi La Liste Que Vous Voulez Inserer? \n");
                scanf("%d",&x);
                T[a-1][b-1]=x;
        }
           while((x!=3)&&(x!=4)&&(x!=5)&&(x!= 6)&&(x!= 7)&&(x!= 8)  );
            }
            else
                printf("Erreur");
        }
        while (!verif(T) && a!=4);
        sauvguard(T,"sauvgard_2_niv_2.txt");
        ins1niv2=fopen("insertion2niv2.txt","r");
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(ins1niv2,"%d",&ch);
                TM[i][j]=ch;
            }
        }
        fclose(ins1niv2);
        aa=0;
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                if (T[i][j]==TM[i][j])
                    aa++;
            }
        }
        system("cls");
        if (aa==16)
            {printf("Vous avez Gagne\n");
            printf("Votre score est de 20 Points \n");

        printf("\n\n Que Voulez Vous Faire?\n");
        printf("1 - Rejouer\n");
        printf("2 - Passer Au Niveau Suivant\n");
        printf("3 - Revenir Au Menu General\n");
        scanf("%d",&choix2);
        switch(choix2)
        {
        case 1:
        {
            niveau_moyen();
        }
        case 2:
        {
            niveau_difficile();
        }
        case 3:
        {
            system("cls");
            MenuGeneral();

        }
        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();}
        else {printf("Vous avez Perdu\n");
        printf("Votre score est de 0 Points \n");
         textbackground(RED);
                        printf("la solution est : \n");
                        textbackground(CYAN);

        for(i=0; i<3; i++)
        {
            for(j=0; j<4; j++)
            {textcolor(BLACK);
                printf("\t  %d  ",TM[i][j]);
            textcolor(WHITE);
            }
            printf("\n");}

  for(j=0; j<3; j++)
                {textcolor(BLACK);
                printf("\t  %d ",T[3][j]);
              textcolor(WHITE);
                }

        printf("\n\n Que Voulez Vous Faire?\n");
        printf("1 - Rejouer\n");

        printf("2 - Revenir Au Menu General\n");
        scanf("%d",&choix2);
        switch(choix2)
        {
        case 1:
        {
            niveau_moyen();
        }

        case 2:
        {
            system("cls");
            MenuGeneral();

        }
        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();
        }
        }
    //grille 3 niveau 2

    if(grille==3)                                                                  //le choix de la grille 3 dans le niveau moyen
    {
        printf("\n 1 - Nouvelle partie \n 2 - Continuer\n");
        do
        {
            scanf("%d",&s);
        }
        while(s!=1 && s!=2);
        if(s==1)
            gr12=fopen("grille_3_niv_2.txt","r");
        if(s==2)
            gr12=fopen("sauvgard_3_niv_2.txt","r");
        printf("\n A VOUS DE JOUER MAINTENANT \n");

                for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(gr12,"%d",&w);
                T[i][j]=w;
            }
        }
        fclose(gr12);
        do
        {
            system("cls");
            for(i=0; i<3; i++)
            {
                printf("\n");
                for(j=0; j<4; j++)
                {

                    if(T[i][j]==0)
                        {printf("\t");
                            textbackground(RED);
                        printf("%c",'?');
                        textbackground(CYAN);

                        }
                    else
                    {
                        textbackground(CYAN);
                        printf("\t");
                        if(j==3)
                    {

                        textcolor(YELLOW);
                    }

                        printf("%d",T[i][j]);
                        textcolor(WHITE);
                    }

                }

            }

            printf("\n\n");
            for(j=0; j<3; j++)
                {textcolor(BLUE);
                printf("\t%d  ",T[3][j]);
                textcolor(WHITE);}




            printf("\n\n\n La liste des valeures : 1 2 3 5 6 9 \n") ;
            printf("Pour quitter la partie taper sur 4 4 \n");
            printf("Donner la Ligne\n");
            scanf("%d",&a);
            printf("Donner la Colonne\n");
            scanf("%d",&b);
            if(T[a-1][b-1]==0)
             {
                 do
               {
               printf("Quelle Est La Valeur Parmi La Liste Que Vous Voulez Inserer? \n");
                scanf("%d",&x);
                T[a-1][b-1]=x;
        }
           while((x!=1)&&(x!=2)&&(x!=3)&&(x!= 5)&&(x!= 6)&&(x!= 9)  );
            }
            else
                printf("Erreur");
        }
        while (!verif(T) && a!=4);
        sauvguard(T,"sauvgard_3_niv_2.txt");
        ins1niv2=fopen("insertion3niv2.txt","r");
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(ins1niv2,"%d",&ch);
                TM[i][j]=ch;
            }
        }
        fclose(ins1niv2);
        aa=0;
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                if (T[i][j]==TM[i][j])
                    aa++;
            }
        }
        system("cls");
        if (aa==16)
            {printf("Vous avez Gagne \n");
            printf("Votre score est de 20 Points \n");

        printf("\n\n Que Voulez Vous Faire?\n");
        printf("1 - Rejouer\n");
        printf("2 - Passer Au Niveau Suivant\n");
        printf("3 - Revenir Au Menu General\n");
        scanf("%d",&choix2);
        switch(choix2)
        {
        case 1:
        {
            niveau_moyen();
        }
        case 2:
        {
            niveau_difficile();
        }
        case 3:
        {
            system("cls");
            MenuGeneral();

        }
        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();}
        else {printf("Vous avez Perdu\n");
        printf("Votre score est de 0 Points \n");
                 textbackground(RED);
                        printf("la solution est : \n");
                        textbackground(CYAN);

        for(i=0; i<3; i++)
        {
            for(j=0; j<4; j++)
            {textcolor(BLACK);
                printf("\t  %d  ",TM[i][j]);
            textcolor(WHITE);
            }
            printf("\n");}

  for(j=0; j<3; j++)
                {textcolor(BLACK);
                printf("\t  %d ",T[3][j]);
              textcolor(WHITE);
                }
printf("\n\n Que Voulez Vous Faire?\n");
        printf("1 - Rejouer\n");

        printf("2 - Revenir Au Menu General\n");
        scanf("%d",&choix2);
        switch(choix2)
        {
        case 1:
        {
            niveau_moyen();
        }

        case 2:
        {
            system("cls");
            MenuGeneral();

        }
        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();}}
    return 0;
}




int niveau_difficile()                                                                        //la fonction du niveau difficile
{
    int x,w,i,j,ch,aa,b,a,s,choix3;
    int T[4][4],TM[4][4];
    int grille;
    FILE*gr13;
    FILE*ins1niv3;
    do
    {
        printf("\n Quelle Grille Voulez Vous Choisir? \n Grille 1 ** Grille 2 ** Grille 3\n");
        scanf("%d",&grille);
    }
    while(grille>3||grille<1);
    system("cls");


    //grille1 niveau 3
    if(grille==1)                                                                      //le choix de la grille 1 dans le niveau Difficile
    {
        printf("\n 1 - Nouvelle partie \n 2 - Continuer\n");
        do
        {
            scanf("%d",&s);
        }
        while(s!=1 && s!=2);
        if(s==1)
            gr13=fopen("grille_1_niv_3.txt","r");
        if(s==2)
            gr13=fopen("sauvgard_1_niv_3.txt","r");
        printf("\n A VOUS DE JOUER MAINTENANT \n");


                for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(gr13,"%d",&w);
                T[i][j]=w;
            }
        }
        fclose(gr13);
        do
        {
            system("cls");
            for(i=0; i<3; i++)
            {
                printf("\n");
                for(j=0; j<4; j++)
                {

                    if(T[i][j]==0)
                        {printf("\t");
                            textbackground(RED);
                        printf("%c",'?');
                        textbackground(CYAN);

                        }
                    else
                    {
                        textbackground(CYAN);
                        printf("\t");
                        if(j==3)
                    {

                        textcolor(YELLOW);
                    }

                        printf("%d",T[i][j]);
                        textcolor(WHITE);
                    }

                }

            }

            printf("\n\n");
            for(j=0; j<3; j++)
                {textcolor(BLUE);
                printf("\t%d  ",T[3][j]);
                textcolor(WHITE);}


            printf("\n\n\n La liste des valeures : 1 2 3 5 6 7 8 9 \n") ;
            printf("Pour quitter la partie taper sur 4 4 \n");
            printf("Donner la Ligne\n");
            scanf("%d",&a);
            printf("Donner la Colonne\n");
            scanf("%d",&b);
            if(T[a-1][b-1]==0)
             {
                 do
               {
               printf("Quelle Est La Valeur Parmi La Liste Que Vous Voulez Inserer? \n");
                scanf("%d",&x);
                T[a-1][b-1]=x;
        }
           while((x!=2)&&(x!=3)&&(x!=5)&&(x!= 6)&&(x!= 7)&&(x!= 1)&&(x!= 8)&&(x!= 9)  );
            }
            else
                printf("Erreur");
        }
        while (!verif(T) && a!=4);
        sauvguard(T,"sauvgard_1_niv_3.txt");
        ins1niv3=fopen("insertion1niv3.txt","r");
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(ins1niv3,"%d",&ch);
                TM[i][j]=ch;
            }
        }
        fclose(ins1niv3);
        aa=0;
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                if (T[i][j]==TM[i][j])
                    aa++;
            }
        }
        system("cls");
        if (aa==16)
        {
            printf("Vous avez Gangne\n");
            printf("Votre score est de 30 Points");}
        else
        {printf("Vous avez Perdu\n");
        printf("Votre score est de 0 Points\n");
              textbackground(RED);
                        printf("la solution est : \n");
                        textbackground(CYAN);

        for(i=0; i<3; i++)
        {
            for(j=0; j<4; j++)
            {textcolor(BLACK);
                printf("\t  %d  ",TM[i][j]);
            textcolor(WHITE);
            }
            printf("\n");}
            }
  for(j=0; j<3; j++)
                {textcolor(BLACK);
                printf("\t  %d ",T[3][j]);
              textcolor(WHITE);
                }

        printf("\n\nQue Voulez Vous Faire?\n");
        printf("1 - Rejouer\n");
        printf("2 - Revenir Au Menu General\n");
        scanf("%d",&choix3);
        switch(choix3)
        {
        case 1:
            niveau_difficile();
        case 2:
        {
            system("cls");
            MenuGeneral();
        }
        }
        printf("Taper sur entrer pour revenir au Menu Principal");
        getch();

        system("cls");
        MenuGeneral();
    }



    //grille 2 niveau 3
    if(grille==2)                                                                          //le choix de la grille 2 dans le niveau Difficile
    {
        printf("\n 1 - Nouvelle partie \n 2 - Continuer\n");
        do
        {
            scanf("%d",&s);
        }
        while(s!=1 && s!=2);
        if(s==1)
            gr13=fopen("grille_2_niv_3.txt","r");
        if(s==2)
            gr13=fopen("sauvgard_2_niv_3.txt","r");
        printf("\n A VOUS DE JOUER MAINTENANT \n");

                for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(gr13,"%d",&w);
                T[i][j]=w;
            }
        }
        fclose(gr13);
        do
        {
            system("cls");
            for(i=0; i<3; i++)
            {
                printf("\n");
                for(j=0; j<4; j++)
                {

                    if(T[i][j]==0)
                        {printf("\t");
                            textbackground(RED);
                        printf("%c",'?');
                        textbackground(CYAN);

                        }
                    else
                    {
                        textbackground(CYAN);
                        printf("\t");
                        if(j==3)
                    {

                        textcolor(YELLOW);
                    }

                        printf("%d",T[i][j]);
                        textcolor(WHITE);
                    }

                }

            }

            printf("\n\n");
            for(j=0; j<3; j++)
                {textcolor(BLUE);
                printf("\t%d  ",T[3][j]);
                textcolor(WHITE);}


            printf("\n\n\n La liste des valeures : 1 2 3 4 5 7 8 9 \n") ;
            printf("Pour quitter la partie taper sur 4 4 \n");
            printf("Donner la Ligne\n");
            scanf("%d",&a);
            printf("Donner la Colonne\n");
            scanf("%d",&b);
            if(T[a-1][b-1]==0)
            {
                 do
               {
               printf("Quelle Est La Valeur Parmi La Liste Que Vous Voulez Inserer? \n");
                scanf("%d",&x);
                T[a-1][b-1]=x;
        }
           while((x!=2)&&(x!=3)&&(x!=5)&&(x!= 4)&&(x!= 7)&&(x!= 1)&&(x!= 8)&&(x!= 9)  );
            }
            else
                printf("Erreur");
        }
        while (!verif(T) && a!=4);
        sauvguard(T,"sauvgard_2_niv_3.txt");
        ins1niv3=fopen("insertion2niv3.txt","r");
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(ins1niv3,"%d",&ch);
                TM[i][j]=ch;
            }
        }
        fclose(ins1niv3);
        aa=0;
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                if (T[i][j]==TM[i][j])
                    aa++;
            }
        }
        system("cls");
        if (aa==16)
           {
            printf("\n Vous avez Gagne\n");
            printf("Votre score est de 30 Points \n");
           }
        else
        {printf("Vous avez Perdu\n");
        printf("Votre score est de 0 Points \n");
                 textbackground(RED);
                        printf("la solution est : \n");
                        textbackground(CYAN);

        for(i=0; i<3; i++)
        {
            for(j=0; j<4; j++)
            {textcolor(BLACK);
                printf("\t  %d  ",TM[i][j]);
            textcolor(WHITE);
            }
            printf("\n");}
            }
  for(j=0; j<3; j++)
                {textcolor(BLACK);
                printf("\t  %d ",T[3][j]);
              textcolor(WHITE);
                }

        printf("\n\nQue Voulez Vous Faire?\n");
        printf("1 - Rejouer\n");
        printf("2 - Revenir Au Menu General\n");
        scanf("%d",&choix3);
        switch(choix3)
        {
        case 1:

        {

            niveau_difficile();
        }
        case 2:
        {
            system("cls");
            MenuGeneral();
        }
        }
        printf(" \n Taper sur entrer pour revenir au Menu Principal");
        getch();

        system("cls");
        MenuGeneral();

    }


   //GRILLE 3 NIVEAU 3
    if(grille==3)                                                          //le choix de la grille 3 dans le niveau Difficile
    {
        printf("\n 1 - Nouvelle partie \n 2 - Continuer \n");
        do
        {
            scanf("%d",&s);
        }
        while(s!=1 && s!=2);
        if(s==1)
            gr13=fopen("grille_3_niv_3.txt","r");
        if(s==2)
            gr13=fopen("sauvgard_3_niv_3.txt","r");
        printf("\n A VOUS DE JOUER MAINTENANT !!\n");

                for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(gr13,"%d",&w);
                T[i][j]=w;
            }
        }
        fclose(gr13);
        do
        {
            system("cls");
            for(i=0; i<3; i++)
            {
                printf("\n");
                for(j=0; j<4; j++)
                {

                    if(T[i][j]==0)
                        {printf("\t");
                            textbackground(RED);
                        printf("%c",'?');
                        textbackground(CYAN);

                        }
                    else
                    {
                        textbackground(CYAN);
                        printf("\t");
                        if(j==3)
                    {

                        textcolor(YELLOW);
                    }

                        printf("%d",T[i][j]);
                        textcolor(WHITE);
                    }

                }

            }

            printf("\n\n");
            for(j=0; j<3; j++)
                {textcolor(BLUE);
                printf("\t%d  ",T[3][j]);
                textcolor(WHITE);}


            printf("\n\n\n La liste des valeures : 1 2 4 5 6 7 8 9 \n") ;
            printf("\n Pour quitter la partie taper sur 4 4 \n");
            printf("Donner la Ligne\n");
            scanf("%d",&a);
            printf("Donner la Colonne\n");
            scanf("%d",&b);
            if(T[a-1][b-1]==0)
            {
                 do
               {
               printf("Quelle Est La Valeur Parmi La Liste Que Vous Voulez Inserer? \n");
                scanf("%d",&x);
                T[a-1][b-1]=x;
        }
           while((x!=2)&&(x!=4)&&(x!=5)&&(x!= 6)&&(x!= 7)&&(x!= 1)&&(x!= 8)&&(x!= 9)  );
            }
            else
                printf("Erreur");
        }
        while (!verif(T) && a!=4);
        sauvguard(T,"sauvgard_3_niv_3.txt");
        ins1niv3=fopen("insertion3niv3.txt","r");
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                fscanf(ins1niv3,"%d",&ch);
                TM[i][j]=ch;
            }
        }
        fclose(ins1niv3);
        aa=0;
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                if (T[i][j]==TM[i][j])
                    aa++;
            }
        }
        system("cls");
        if (aa==16)
     {printf("\n Vous avez Gagne\n");
            printf("Votre score est de 30 Points \n");
    }
        else
        {printf("Vous avez Perdu\n");
        printf("Votre score est de 0 Points \n");
                  textbackground(RED);
                        printf("la solution est : \n");
                        textbackground(CYAN);
    for(i=0; i<3; i++)
        {
            for(j=0; j<4; j++)
            {textcolor(BLACK);
                printf("\t  %d  ",TM[i][j]);
            textcolor(WHITE);
            }
            printf("\n");}
            }
  for(j=0; j<3; j++)
                {textcolor(BLACK);
                printf("\t  %d ",T[3][j]);
              textcolor(WHITE);
                }

        printf("\n\nQue Voulez Vous Faire?\n");
        printf("1 - Rejouer\n");
        printf("2 - Revenir Au Menu General\n");
        scanf("%d",&choix3);
        switch(choix3)
        {
        case 1:
            niveau_difficile();
        case 2:
        {
            system("cls");
            MenuGeneral();
        }
        }
        printf("\n Taper sur entrer pour revenir au menu principal \n");
        getch();

        system("cls");
        MenuGeneral();
    }
    return 0;
}






int verif(int T[4][4])
{
    int i,j;
    for (i=0; i<4; i++)
    {
        for(j=0; j<4; j++)
        {
            if(T[i][j]==0)
                return 0;
        }
    }
    return 1;
}

void sauvguard(int T[4][4],char ch[20])
{
    int i,j;
    FILE *f2;
    f2=fopen(ch,"w");

    for (i=0; i<4; i++)
    {
        for (j=0; j<4; j++)
        {
            fprintf(f2,"%d ",T[i][j]);
        }
        fprintf(f2,"%c",'\n');
    }
    fclose(f2);
}
